package com.master.util;


/***
 * 封装返回给前端的JSON数据
 * 包括code,msg,data
 */
public class Result<T> {
    private int code;//返回给前端的状态码,前端根据此状态码判断响应成功与否
    private String msg;//返回的状态描述信息
    private T data;//返回给前端的数据,定义为泛型

    private Result(T data){
        this.code = 0;//0状态表示成功
        this.msg = "success";
        this.data = data;
    }

    private Result(CodeMsg cm){
        if(cm == null){
            return;
        }
        this.code = cm.getCode();
        this.msg = cm.getMsg();
    }

    public int getCode() {
        return code;
    }


    public String getMsg() {
        return msg;
    }



    public T getData() {
        return data;
    }



    /**
     * 响应成功时的调用
     * 响应成功的时候只传入数据
     * @param data
     * @param <T>
     * @return
     */
    public static <T> Result<T> success(T data){
        return new Result<T>(data);
    }

    /**
     * 响应失败的调用
     * 失败的时候根据不同模块的失败情况,将CodeMsg传入
     * 对响应进行封装,简化开发,有利于代码的重构和维护,以及扩展
     * @param cm
     * @param <T>
     * @return
     */
    public static <T> Result<T> error(CodeMsg cm){
        return new Result<T>(cm);
    }
}
